/*
 * e-motion control http://code.google.com/p/e-motioncontrol/
 * 
 * Copyright (c) 2008-2009,
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms,
 * with or without modification, are permitted provided
 * that the following conditions are met:
 *    - Redistributions of source code must retain the
 *      above copyright notice, this list of conditions
 *      and the following disclaimer.
 *
 *    - Redistributions in binary form must reproduce the
 *      above copyright notice, this list of conditions and
 *		the following disclaimer in the documentation and/or
 *		other materials provided with the distribution.
 *    - Neither the name of the e-motioncontrol nor the names
 *       of its contributors may be used to endorse or promote
 *		products derived from this software without specific
 *		prior written permission.
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICTLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef EMC_TRAJECTORY
#define EMC_TRAJECTORY

#define POS_VAR 4000.0f
#define ANGLE_VAR M_PI/2
#define OR_TEST(alpha, a, b) ((((alpha >= (a)) || (alpha <= (b)))) ? 1 : 0)
#define AND_TEST(alpha, a, b) ((((alpha >= (a)) && (alpha <= (b)))) ? 1 : 0)
#define OR_E(alpha) AND_TEST(alpha, -M_PI/8, M_PI/8)
#define OR_NE(alpha) AND_TEST(alpha, M_PI/8, 3 * M_PI/8)
#define OR_N(alpha) AND_TEST(alpha, 3 * M_PI/8, 5 * M_PI/8)
#define OR_NW(alpha) AND_TEST(alpha, 5 * M_PI/8, 7 * M_PI/8)
#define OR_W(alpha) OR_TEST(alpha, 7 * M_PI/8, -7 * M_PI/8)
#define OR_SW(alpha) AND_TEST(alpha, -7 * M_PI/8, -5 * M_PI/8)
#define OR_S(alpha) AND_TEST(alpha, -5 * M_PI/8, -3 * M_PI/8)
#define OR_SE(alpha) AND_TEST(alpha, -3 * M_PI/8, -M_PI/8)
#define E  0 
#define NE 1 
#define N  2 
#define NW 3 
#define W  4 
#define SW 5 
#define S  6
#define SE 7

#include "wiimote.h"

float compute_angle(float dx, float dy);
int get_orientation(struct wiimote_t* wm);
int dir_to_int(char *dir);
char *int_to_dir(int dir);

#endif
